/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ia_psr.graph;

import ia_psr.problemas.IProblema;
import ia_psr.problemas.Variable;

/**
 *
 * @author Rubén Avalos Elvira y Fabiana Celiberti Tapie
 */

public class GrafoRestricciones extends Grafo {
    protected IProblema p;

    public GrafoRestricciones(IProblema p) {
        this.p = p;
    }

    public int estadoValido() {
        return p.comprobar(this);
    }
    public boolean addRestriccion(Arista a) {
        return
            nodos.get(nodos.indexOf(a.origen)).aristas.add(a) &&
            nodos.get(nodos.indexOf(a.destino)).aristas.add(a);
    }
    public boolean addRestriccion(Nodo n1, Nodo n2) {
        return
            nodos.get(nodos.indexOf(n1)).aristas.add(new Arista(n1, n2)) &&
            nodos.get(nodos.indexOf(n2)).aristas.add(new Arista(n2, n1));

    }
    public void addNodo(String nombre) {
        nodos.add(new NodoPSR(nombre));
    }

    public void resetAllNodos() {
        for (Nodo nodo : nodos) {
            NodoPSR n = (NodoPSR)nodo;
            resetNodo(n);
        }
    }

    public void resetNodo(NodoPSR n) {
        p.resetNodo(n);
    }

    public void asignVariable(NodoPSR n, Variable v) {
        n.valor = v;
    }

    public void deasignVariable(NodoPSR n, Variable v) {
        n.valor.setValue(null);
    }

    public void setProblema(IProblema p) {
        this.p = p;
    }

    public IProblema getProblema() {
        return p;
    }

    public void print() {
        for (Nodo n : nodos) {
            System.out.println(n);
            System.out.print(" - Adyacentes: ");
            for (Arista a : n.getAristas())
                System.out.print(a.destino.nombre + " ");
            System.out.println("");
        }
    }
    /**@deprecated*/
    public boolean addArista(Nodo n, Arista a) { return false; }
    /**@deprecated*/
    public boolean addArista(String nombre, Arista a) { return false; }
}